iT邦幫忙

1

Python 遞迴:函式自我呼叫的藝術 「為什麼雞生蛋,蛋裡又有雞?」

  • 分享至 

  • xImage
  •  

遞迴 (Recursion) 在程式設計中是一個強大的概念,
指的是一個函式在它的定義中直接或間接地呼叫自己。
就像一面鏡子不斷地反射自己的影像一樣,
遞迴函式會不斷地呼叫自己,直到滿足某個條件為止。

形象比喻:
想像你在一個房間裡,房間裡有一面鏡子,鏡子對著牆壁。
你站在鏡子前,鏡子裡會反射出你的影像。這個影像又在鏡子裡產生了一個更小的影像,
如此不斷重複。這就像一個函式不斷地呼叫自己一樣。

Python 遞迴的特性:

基底條件 (Base Case): 每個遞迴函式都必須有一個或多個基底條件,當滿足這個條件時,函式不再呼叫自己,而是直接返回結果。這就像鏡子對著牆壁,影像最終會消失。
遞迴關係式 (Recursive Case): 函式會呼叫自己,
但參數會有所變化,讓函式逐漸接近基底條件。這就像鏡子中的影像越來越小。
簡單的遞迴範例:計算階乘

def factorial(n):
    if n == 0:
        return 1  # 基底條件:0 的階乘為 1
    else:
        return n * factorial(n - 1)  # 遞迴關係式

解釋:
當 n 等於 0 時,直接返回 1。
否則,返回 n 乘以 n-1 的階乘。
函式會不斷地呼叫自己,直到 n 等於 0 為止。

為什麼要使用遞迴?

-解決複雜問題: 遞迴可以簡潔地解決一些複雜的問題,例如樹的遍歷、圖的搜索等。
-描述遞歸結構: 對於具有遞歸定義的問題,遞迴函式能更自然地表達問題的解法。
-函式式編程: 遞迴是函式式編程的重要概念。

遞迴的缺點:

效率問題: 過多的遞迴呼叫可能會導致棧溢出,影響程式性能。
難以理解: 遞迴的思維方式對於初學者來說可能比較抽象。

何時使用遞迴?

問題具有遞歸結構。
問題可以分解為更小的子問題,且子問題與原問題具有相同的形式。
基底條件明確。

階乘是什麼?

階乘是一個數學概念,表示從 1 開始連續乘到這個數的所有正整數的積。用數學符號「!」表示。
例如:
5 的階乘,記作 5!,等於 5 × 4 × 3 × 2 × 1 = 120。
n 的階乘,記作 n!,等於 n × (n-1) × (n-2) × ... × 3 × 2 × 1。

階乘的特性:

0 的階乘定義為 1,也就是 0! = 1。
階乘的值增長非常快,即使是比較小的數字,其階乘也會是一個很大的數。

在生活中的例子算出排列組合有幾種:

-密碼
-抽獎
-分配工作
-科學實驗

Python 裡的階乘範例

def factorial_recursive(n):
  if n == 0 or n == 1:
    return 1
  else:
    return n * factorial_recursive(n - 1)

# 計算4的階乘
result = factorial_recursive(4)
print(result)  # 输出:24

費氏數列的定義

費氏數列從 0 和 1 開始,之後的每個數字都是前兩個數字的和。也就是說:

費氏數列的前幾項是:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...
f(0) = 0
f(1) = 1
f(2) = f(1) + f(0) = 1 + 0 = 1
f(3) = f(2) + f(1) = 1 + 1 = 2
f(4) = f(3) + f(2) = 2 + 1 = 3

F(0) = 0
F(1) = 1
F(n) = F(n-1) + F(n-2) (當 n > 1)

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言